package com.bjsxt.commu1;

public class ProduceRunnable implements Runnable {

    private Product product;

    public ProduceRunnable(Product product) {
        this.product = product;
    }

    @Override
    public void run() {

        int i = 0;
        while (true) {
            synchronized (product) {
                //判断仓库是否为空，仓库不为空则等待消费
                if (product.flag) {
                    try {
                        product.wait();     //（必须使用同步监视器的wait()方法、必须在同步块中）
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                if (i % 2 == 0) {
                    product.setName("馒头");
                    try {
                        Thread.sleep(10);       //只释放CPU，不释放锁
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    product.setColor("白色");
                } else {
                    product.setName("面包");
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    product.setColor("黄色");
                }

                System.out.println("生产者生产一件商品：" + product.getName() + "，" + product.getColor());

                //改变仓库状态
                product.flag = true;

                //唤醒消费者
                product.notify();       //随机唤醒一个线程（目前只有2个），唤醒的一定是消费者
            }

            i++;
        }
    }
}
